$(function(){
    //功能一: 全选 
    /* 
        需求:点击全选按钮,让所有的商品进行选中效果
    */

    // 当前为有input标签样式,操作比较麻烦 有BUG

   /*  $('.allSelect').click(function(){
        // alert(1)
        //获取当前span的兄弟input的状态值
        let status=$(this).siblings('input').prop('checked');

        //设置当前状态到其它商品中的input标签上
        $('.singleSelect').prop('checked',!status);

        //把另一个全选也进行选中
        $('.otherSelt').prop('checked',!status);
        console.log(status)
    }) */

    $('.allSelect').click(function(){
        // alert(1)
        //1.获取当前input标签的状态值
        let status=$(this).prop('checked');

        //2.把所有商品进行同步状态(选中)
        $('.singleSelect').prop('checked',status);

        //3.把另一个全选也进行同步状态
        $('.allSelect').prop('checked',status);
        
    })

    //功能二: 反选
    /* 
        思路:
            1.给singleSelect注册点击事件
            2.定义标杆状态  let flag=false
            3.动态获取到所有单个商品的状态值
                判定:
                    如果其中有一个没有选中,全选就不能选中
                    切换标杆状态  flag=!flag

            4.通过判定flag的状态来设置对应 全选按钮的状态

    
    */
   $('.singleSelect').click(function(){
    //    alert(1)
        //定义标杆状态 (未选中)
        let flag=false;

        //获取 [所有单个商品] 的状态值()
        //let status=$('.singleSelect').prop('checked');//只能获取到第一个input标签的状态,不能使用
        
        //需要使用遍历 获取所有单个商品状态值
        $('.singleSelect').each(function(index,dom){
            //console.log(dom);//获取到是原生对象
           //console.log($(this));//jq对象

           //获取第一个单个商品input标签的状态值
           let status=$(this).prop('checked');

           //判定:  只要有一个为false 不选中全选 
           //status==false
           if(!status){
             //切换
             flag=true;
             //一般只要有一个为false,后面的东西就可以不执行了 跳出操作
             return;
           }
        })

        //判定  当flag 为true时, 表示单个商品至少有一件没有选中  不全选
        if(flag){
            //不全选
            $('.allSelect').prop('checked',false);
        }else{
            //全选
            $('.allSelect').prop('checked',true);
        }

   })
      //商品数量加操作:
   $('.addNum').click(function(){
    //改变减操作中的按钮样式
    $('.reduce').css({
             cursor:'pointer',
             color:''
         });

    //    alert(2)
     //1.获取当前行中的数量的值
     let num=$(this).siblings('input').val();

     //数量自增1
     num++;

     //把新数量放入指定位置
     $(this).siblings('input').val(num);

    //调用小计
    sTotal(this,num);
     //总价格和总件数
     allCount()

})

//商品数量减操作:
$('.reduce').click(function(){
 //    alert(2)
     //1.获取当前行中的数量的值
     let num=$(this).siblings('input').val();

     //数量自减1
     num--;

     //判定
     if(num<1){
         // num=1; 
         //细节操作
         $(this).css({
             cursor:'not-allowed',
             color:'#ccc'
         });
         return false;
     }

     //把新数量放入指定位置
     $(this).siblings('input').val(num);
     
     //调用小计
     sTotal(this,num);

      //总价格和总件数
      allCount()
})


//定义小计函数
 function sTotal(obj,num){
    //计算单个商品的小计功能:
     /* 
         小计= 商品单价*数量 
     */

     //获取单件商品的价格 .sPrice的值  数量本身已经拿到了
     let singlePrice=$(obj).closest('tr').find('.sPrice').text();
     //计算小计
     let singleTotal=singlePrice*num;

     //数据处理
     singleTotal=singleTotal.toFixed(2);

     //把当前的价格添加到小计中
     $(obj).closest('tr').find('.sTotal').text(singleTotal); 
 }


 //定义计算总价和总数量的功能
     /* 
         步骤:
             1.定义变量保存 总价 和总数量
             2.获取已经选中商品 总数量 和总价格
             3.把获取的数据添加到指定位置
     */

     function allCount() {
         //1.定义变量保存 总价 和总数量
             let allNum=0;//总数量
             let allPrice=0;//总价格

         //2.获取已经选中商品 总数量 和总价格
         //由于可能会选中多个商品,需要使用遍历来获取每一件商品中的对应的值 
         //单件商品总数量 和单件商品 总价格 
         $('.singleSelect:checked').each(function(){
             //计算总数量
                 //console.log($(this));//表示当前 $('.singleSelect:checked')
                 //获取当前商品中的总数量
                 let totalN=parseInt($(this).closest('tr').find('.txt').val());
                 //累加
                 allNum+=totalN;  //  allNum= allNum+ totalN

             //计算总价格
                 //获取当前商品的小计
                 let sCount=parseFloat($(this).closest('tr').find('.sTotal').text());
                 //累加
                 allPrice+=sCount;                
         })

         //3.把获取的数据添加到指定位置
         //总数量
         $('.totalNum').text(allNum);

         //总价格
             // 数据处理
             allPrice=allPrice.toFixed(2);

         $('.totalPrice').text(allPrice);

     }
})